home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Arsenal Files 4
/
The Arsenal Files 4 (Arsenal Computer).ISO
/
casm
/
au116-as.exe
/
UTIL
/
SUBST.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-09
|
2KB
|
118 lines
#include "..\au.hpp"
/*************************************************************************/
void substitute_macros(char *dest_string, char *execute, char *over_opt,
char *path_opt, char *yes_opt, char *filename)
{
while (*execute != '\0')
{
if (*execute == '%')
{
*execute++;
*dest_string = '\0';
switch (toupper(*execute))
{
case 'F':
strcat(dest_string, filename);
dest_string += strlen(dest_string);
break;
case 'O':
if (over_opt != NULL)
{
strcat(dest_string, over_opt);
dest_string += strlen(dest_string);
}
break;
case 'P':
if (path_opt != NULL)
{
strcat(dest_string, path_opt);
dest_string += strlen(dest_string);
}
break;
case 'Y':
if (yes_opt != NULL)
{
strcat(dest_string, yes_opt);
dest_string += strlen(dest_string);
}
break;
}
}
else
*dest_string++ = *execute;
execute++;
}
*dest_string = '\0';
return;
}
/************************************************************************/
void subst_environ(AU *au, char *string)
{
char var[300];
char *varPtr;
char newString[300];
char *newPtr = newString;
char *ptr = string;
BYTE normal;
while (*ptr != '\0')
{
if (*ptr == '%')
{
ptr++;
if (*ptr == '%')
{
*newPtr++ = '%';
ptr++;
continue;
}
varPtr = var;
normal = TRUE;
while (*ptr != '%')
{
*varPtr++ = *ptr;
if (*ptr == '\0' || isspace(*ptr))
{
normal = FALSE;
break;
}
ptr++;
}
*varPtr = '\0';
if (!normal || strlen(var) < 2)
{
strcpy(newPtr, "%");
newPtr++;
strcpy(newPtr, var);
newPtr += strlen(var);
if (normal)
{
strcpy(newPtr, "%");
newPtr++;
}
}
else
{
strupr(var);
if (getenv(var) != NULL)
{
strcpy(newPtr, getenv(var));
newPtr += strlen(getenv(var));
}
else
au_printf_error(au, "Environment variable \"%s\" not found", var);
}
}
else
*newPtr++ = *ptr;
if (*ptr != '\0')
ptr++;
}
*newPtr = '\0'; /* NULL terminate the string */
strcpy(string, newString);
return;
}